您可以减少 Kanzi 应用程序显示的网格中的顶点数据量,以提高应用程序的性能。当减少网格顶点数据量时,kzb 文件的大小和运行时所需的 GPU 内存量都会减小。
您可以使用 网格特性编辑器 (Mesh Attributes Editor) 更改网格的顶点数据。
例如,您可以使用 网格特性编辑器 (Mesh Attributes Editor) 移除不使用的特性,并根据您的需求选择最佳的数据类型。
要编辑网格特性:
要查看和编辑材质类型的着色器特性的语义,在 素材库 (Library) > 材质和纹理 (Materials and Textures) > 材质类型 (Material Types) 中右键点击材质类型并选择打开着色器特性编辑器 (Open Shader Attributes Editor)。
如果要导出的 kzb 文件具有您目前在 导出 (Export) 表格中设置的值,则网格特性编辑器 (Mesh Attributes Editor) 底部的状态栏会显示网格顶点数据的大小。
GPU 具有特定大小的顶点缓存。访问缓存中的网格顶点要比访问存储器中其他位置的顶点快一个数量级。您可以重新排列顶点缓冲区中的顶点和索引,以使缓存达到最佳值,从而为特定的缓存大小优化网格数据。
例如,16 字节的顶点缓存可以存储位置 + 法线 + 纹理坐标 (XYZ * 2 + XYZ * 2 + UV * 2),但不足以存储位置 + 法线 + 纹理坐标 + 颜色。
要为您的目标硬件设置正确的顶点缓存大小:
为了优化您的网格,请为每个网格特性设置占据最少空间但能够提供足够高的视觉精度以满足您需求的数据类型。Kanzi 在将特性存储到 GPU 内存和将其导出到 kzb 文件时使用数据类型。当使用占据最少空间的数据类型时,kzb 文件的大小和运行时所需的 GPU 内存量都会减小。请参阅 网格特性的数据类型。
要为网格特性设置最佳的数据类型:
语义 (Semantic) | 建议的数据类型 | Kanzi Engine 在导出之前规范化 |
---|---|---|
位置 | 基于数据范围 | |
法线、切线、双切线 |
| x |
纹理坐标 | 基于数据范围,16_UNORM / 16_SNORM / 浮点 (Float) | |
颜色 (Color) | 基于数据范围,8_UNORM / 半浮点 (Half-float) / 浮点 (Float) | |
权重 (Weight) | 基于数据范围 | |
矩阵调色板 | 基于数据范围 | |
表格列出了 Kanzi 支持的网格特性数据类型。
目标图形 API (Target Graphics API) 的可用性 | |||||
---|---|---|---|---|---|
数据类型 | 描述 (Description) | 范围 | OpenGL ES 2.0 | OpenGL ES 2.0 扩展包 (OpenGL ES 2.0 Extension Pack) | OpenGL ES 3 |
浮点 (Float) | 单精度浮点值(32 位) | x | x | x | |
半浮点 (Half-float) | 半精度浮点值(16 位) | x | x | ||
8_SNORM | 8 位有符号规范化数值 | -1.0f ...1.0f | x | x | x |
8_UNORM | 8 位无符号规范化数值 | 0.0f ...1.0f | x | x | x |
16_SNORM | 16 位有符号规范化数值 | -1.0f ...1.0f | x | x | x |
16_UNORM | 16 位无符号规范化数值 | 0.0f ...1.0f | x | x | x |
8_SINT | 8 位有符号整数 | -128 ...127 | x | ||
8_UINT | 8 位无符号整数 | 0 ...255 | x | ||
16_SINT | 16 位有符号整数 | -32768 ...32767 | x | ||
16_UINT | 16 位无符号整数 | 0 ...65,535 | x | ||
32_SINT | 32 位有符号整数 | -2147483648 ...2147483647 | x | ||
32_UINT | 32 位无符号整数 | 0 ...4 294 967 295 | x | ||
32_SNORM | 32 位有符号规范化数值 | -1.0f ...1.0f | x | ||
32_UNORM | 32 位无符号规范化数值 | 0.0f ...1.0f | x | ||
2_10_10_10_SNORM_PACK32 | 四分量 32 位带符号的规范化压缩数值,带有:
|
(-1, -1, -1, -1) ...(1, 1, 1, 1) | x | ||
2_10_10_10_UNORM_PACK32 | 四分量 32 位不带符号的规范化压缩数值:
|
(0, 0, 0, 0) ...(1, 1, 1, 1) | x | ||